package com.sms.util;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.sms.biz.IDataDictBiz;
import com.sms.biz.IUserInfoSmsBiz;
import com.sms.po.TDatadict;

public abstract class Tools_HZX {
	
	/**
	 * 数据字典专用的MAP
	 */
	private static Map<String,List<TDatadict>> dataMap = new HashMap<String,List<TDatadict>>();
	
	/**
	 * 专用于保存用户密码的MAP
	 */
	static Map<String,String> passMap = new HashMap<String,String>();
	
	/**
	 * 数据字典查询类
	 */
	public static IDataDictBiz iddb = null;
	
	/**
	 * 用户信息业务接口
	 */
	public static IUserInfoSmsBiz iuisb = null;
	
	/**
	 * 上次更新数据字典时间
	 */
	private static long updateTime = System.currentTimeMillis();
	
	/**
	 * 时间间隔(秒) 5分钟
	 */
	private final static int TIME_SPACE = 300;
	/**
	 * 基本校验(减少一层空指针校验代码)
	 * @param str 需要校验的字符串
	 * @param reg 正则表表达式
	 * @return 校验通过返回true
	 */
	public static boolean baseCheck(String str,String reg){
		return str == null || reg == null ? false :str.matches(reg);
	}
	
	/**
	 * 获取当前时间
	 * 
	 * @param fmt
	 *            格式化表达式
	 * @return 根据表达式生成当前时间
	 */
	public static String getNowDate(String fmt) {
		return new SimpleDateFormat(fmt).format(new Date());
	}
	
	/**
	 * 过滤关键字
	 * @param content 内容
	 * @param keywords 关键字列表
	 * @return 不存在返回"" 
	 */
	public static String filterStr(String content,String ... keywords){
		if(keywords == null || content == null )return "";
		for(int i =0;i<keywords.length;i++){
			System.out.println(content.indexOf(keywords[i]));
			if(!keywords[i].trim().equals("") && content.indexOf(keywords[i]) < 0)continue;
			return keywords[i];
		}
		return "";
	}
	
	/**
	 * 根据dataKey取数据字典列表
	 * 每5分钟更新一次
	 * @param iddb
	 * @param dataKey
	 * @return
	 */
	public static List<TDatadict> findDataDict(IDataDictBiz iddb2 ,String dataKey){
		List<TDatadict> list = dataMap.get(dataKey);
		//如果DataMap里面的是空的 又或者 （存在DataMap中但更新时间超过5分钟，则直接去查询数据的）
		if((list == null || list.size() == 0) ||
		  (list != null && (System.currentTimeMillis() - updateTime) * 0.0001  > TIME_SPACE)){
			updateTime = System.currentTimeMillis();
			if(iddb2 == null)
				iddb2 = iddb;
			list = iddb2.showDataDictByPage(dataKey, null, null,null,0,1000);
			dataMap.put(dataKey, null);
			System.gc();//回收垃圾
			dataMap.put(dataKey, list);
		}
		//否则直接返回
		return list;
	}
	
	/**
	 * 根据dataKey的dataValue查出remark(中文)
	 * @param dataKey
	 * @param dataValue
	 * @return
	 */
	public static String getDataDictRemark(String dataKey,String dataValue){
		List<TDatadict> dict = Tools.findDataDict(null, dataKey);
 		for (TDatadict ca : dict ){
 			if(ca.getValue().equals(dataValue)){
 				return ca.getRemark();
 			}
 		}
 		return null ;
	}
	/**
	 * 根据dataKey的remark查出value(值)
	 * @param dataKey
	 * @param remark
	 * @return
	 */
	public static String getDataDictValue(String dataKey,String remark){
		List<TDatadict> dict = Tools.findDataDict(null, dataKey);
		for (TDatadict ca : dict ){
			if(ca.getRemark().equals(remark)){
				return ca.getValue();
			}
		}
		return null ;
	}
	/**
	 * 根据用户ID取用户密码，如果在passMap中存在则去MAP中的密码，否则到数据库中
	 * @param userId
	 * @return
	 */
	public static String getPass(String userId){
		String pass = passMap.get(userId);
		if(pass != null) return pass;
		pass = iuisb.findById(userId).getPassword();
		setPass(userId, pass);
		return pass;
	}
	/**
	 * 把用户密码设置进MAP中
	 * @param userId
	 * @param pass
	 */
	public static void setPass(String userId,String pass){
		passMap.put(userId,pass);
	}
	
	/**
	 * 把字符串写入文件路径中
	 * @param filePath
	 * @param sbuf
	 * @return
	 */
	public static String writeFileByStr(String filePath,String sbuf){
		// 创建输出流
		FileOutputStream fos = null;
		BufferedOutputStream bos = null;
		try {
			fos = new FileOutputStream(filePath);
			bos = new BufferedOutputStream(fos);
			// 写文件
			bos.write(sbuf.getBytes());
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return "文件夹不存在";
		} catch (IOException e) {
			e.printStackTrace();
			return "文件写入失败";
		}finally {
			// 关闭流
			try {
				if(bos !=null )
					bos.close();
				if(fos != null )
					fos.close();
			} catch (IOException e) {
				e.printStackTrace();
				return "关闭流失败";
			}
		}
		return "";
	}
	/**
	 * 针对时间HHmmss格式向前面填充0,如1201填充结果是001201
	 * @param time
	 * @return
	 */
	public static String fillTimeZero(Integer time){
		String str = time.toString();
		for(int i=str.length();i<6;i++){
			str = "0"+str;
		}
		return str;
	}
	
	public static void main(String [] agrs){
		System.out.println(fillTimeZero(122001));
//		System.out.println(filterStr("这个就是短信内容",new String[]{"个","哈哈"}) );
		
//		System.out.println((System.currentTimeMillis() - 1328335221510l) * 0.0001);
//		System.out.println(new 
//				String("13800138000\n13800138000\n13800138000;13800138000;	13800138000 ;\n  13800138000;").replaceAll("([\\s|\t|;]+)[\1]?"," ").replaceAll("[\r\n|\n|;|(\\s+)]", "\n")
//				);
//		System.out.println("aaa\\naa");
//		System.out.println("aas哈哈sas6a6s7a77asa".replaceAll("\\W", " "));
	}
}
